//
//  BYTreeView.h
//  BYTreeView
//
//  Created by Bau-yin on 16/1/6.
//  Copyright (c) 2016年 Bau-yin. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "BYTreeNodeData.h"
#import "BYTreeNodeCell.h"

@class BYTreeView;

@protocol BYTreeViewDelegate <NSObject>
@required
/**
 *  @brief  不同的nodeData类型，对应不同的Cell高度
 *
 *  @param tree 所在树
 *  @param node 所对应的数据
 *
 *  @return node cell的高度
 */
- (CGFloat)tree:(BYTreeView *)tree heightForNodeData:(BYTreeNodeData *)nodeData;

/**
 *  @brief  不同的nodeData类型，对应不同的Cell
 *
 *  @param tree     所在树
 *  @param nodeData 所对应的数据
 *
 *  @return 自定义的Cell
 */
- (BYTreeNodeCell *)tree:(BYTreeView *)tree cellForNodeData:(BYTreeNodeData *)nodeData;

@optional
/**
 *  @brief  被选中的节点 是否需要展开或者折叠
 *  @param  tree    所在树
 *  @param  node    被选中的节点
 *  @return YES-执行展开折叠操作，NO-不执行展开折叠操作
 */
- (BOOL)tree:(BYTreeView *)tree shouldExpandAtSeletedNode:(BYTreeNodeCell *)node;

/**
 *  @brief  被选中的节点展开或者折叠后，要执行的操作
 *  @param  tree    所在树
 *  @param  node    被选中的节点
 *  @return void
 */
- (void)tree:(BYTreeView *)tree didExpandAtSeletedNode:(BYTreeNodeCell *)node;

/**
 *  @brief  节点node被选中
 *
 *  @param tree 节点所在树
 *  @param node 被选中的节点
 */
- (void)tree:(BYTreeView *)tree didSelectNodeCell:(BYTreeNodeCell *)node;

@end

@interface BYTreeView : UITableView <BYTreeViewNodeDelegate>

@property (nonatomic) BYTreeNodeData *nodeData;// 节点数据资源
@property (nonatomic, weak) IBOutlet id<BYTreeViewDelegate> treeDelegate;// 代理

@end
